<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
	</head>
	<body>
		<script type="text/javascript">
			/*
			  1.构造都有一个prototype属性
			  2.构造函数中的方法，每创建一个对象，都会在内存中分配空间，为了节省空间，可以把
			    对象公共的属性或行为放到原型对象上，让所有对象共享
			  3.原型是什么？就是一个对象
			  
			*/

			function Student(name, age) {
				this.name = name;
				this.age = age;
				// this.className = "27期";
				/* this.study = function() {
					console.log("学习");
				} */
			}

			var stu01 = new Student("张三", 20);
			var stu02 = new Student("李四", 30);
			
			// console.dir(stu01);
			
			var p = Student.prototype;//Student的原型对象
			// console.log(p);
			
			//把公共的行为放到原型对象上
			Student.prototype.study = function(){
				console.log("学习");
			}
			// stu01.study();
			// stu02.study();
			
			//把公共的属性放到原型对象上
			Student.prototype.className = "27期";
			// console.log(stu01.className);
			// console.log(stu02.className);
			
			
			//每个对象都有__proto___属性指向原型对象
			console.log(stu01.__proto__ === Student.prototype);
			
			/*
			  属性和行为查找机制
			  1.首先在对象自身查找有没有,有就直接访问
			  2.没有,到原型对象上查找
			*/
		   
		   /* var arr = [];
		   arr = new Array();
		   
		   arr.forEach() */
		   
		   
		   console.dir(Student);
		   console.dir(stu01);
			
			
		</script>
	</body>
</html>
